// 目标：实现图的邻接表并添加无向边
// TODO: 补全 add_edge 方法
#[derive(Debug)]
struct Graph {
    adjacency_list: Vec<Vec<usize>>,
}

impl Graph {
    fn new(size: usize) -> Self {
        Graph {
            adjacency_list: vec![vec![]; size],
        }
    }

    // 无向边实现
    fn add_edge(&mut self, src: usize, dest: usize) {
        // 你的代码（注意无向边）
        self.adjacency_list[src].push(dest);
        self.adjacency_list[dest].push(src);
        // 双向添加邻接关系
    }
}

#[test]
fn test_graph() {
    let mut graph = Graph::new(3);

    // 测试单边双向连接
    graph.add_edge(0, 1);
    assert_eq!(graph.adjacency_list[0], vec![1]);
    assert_eq!(graph.adjacency_list[1], vec![0]);
    
    // 测试多边连接
    graph.add_edge(1, 2);
    assert_eq!(graph.adjacency_list[1], vec![0, 2]);
    assert_eq!(graph.adjacency_list[2], vec![1]);
}

// 添加图结构可视化
fn main() {
    let mut graph = Graph::new(5);
    graph.add_edge(0, 1);
    graph.add_edge(0, 2);
    graph.add_edge(1, 3);
    graph.add_edge(2, 4);

    println!("Graph adjacency list:");
    for (node, neighbors) in graph.adjacency_list.iter().enumerate() {
        println!("Node {}: {:?}", node, neighbors);
    }
}
